package com.ssy.lingxi.order.model.constant;

import com.ssy.lingxi.common.language.LanguageHolder;

import java.util.Arrays;

/**
 * 基础采购流程枚举定义
 * @author 万宁
 * @version 2.0.0
 * @date 2022-02-24
 */
public enum BasePurchaseProcessEnum {
    /**
     * 采购询价交易流程 - 1
     */
    order_direct_delivery(1, "order_direct_delivery", "采购询价交易流程", "1-订单提交-->2-订单发货-->3-订单收货"),

    /**
     * 请购单下单流程 - 2
     */
    order_requisition(2, "order_requisition", "请购单下单流程", "1-订单提交-->2-订单发货-->3-订单收货"),

    /**
     * 售后换货处理流程1(含收发货单) - 3
     */
    after_sale_replace_goods_outer_verify_ext(3, "after_sale_replace_goods_outer_verify_ext", "售后换货处理流程1(含收发货单)", "1-售后换货单申请-->2-售后换货单审核-->3-售后换货单确认-->4-退货发货处理-->5-退货收货处理-->6-换货发货处理-->7-换货收货处理"),

    /**
     * 售后换货处理流程2(无收发货单) - 4
     */
    after_sale_replace_goods_manual_delivery_ext(4, "after_sale_replace_goods_manual_delivery_ext", "售后换货处理流程2(无收发货单)", "1-售后换货单申请-->2-售后换货单审核-->3-售后换货单确认-->4-确认售后完成"),

    /**
     * 售后换货处理流程3(线下物流) - 5
     */
    after_sale_replace_goods_outer_verify_offline_logistics_ext(5, "after_sale_replace_goods_outer_verify_offline_logistics_ext", "售后换货处理流程3(线下物流)", "1-售后换货单申请-->2-售后换货单审核-->3-售后换货单确认-->4-确认售后完成"),

    /**
     * 售后退货处理流程1(合同含收发货单) - 6
     */
    after_sale_return_goods_contract_verify_ext(6, "after_sale_return_goods_contract_verify_ext", "售后退货处理流程1(合同含收发货单)", "1：采购商提交退货申请单-->2：供应商确认退货申请单-->3：采购商新增退货发货单-->4：采购商新增物流单-->5：采购商退货发货-->6：供应商新增退货入库单-->7：供应商退货收货-->8：采购商确认退货回单-->9：采购商确认售后完成"),

    /**
     * 售后退货处理流程2(合同线下物流) - 7
     */
    after_sale_return_goods_outer_verify_contract_offline_logistics_ext(7, "after_sale_return_goods_outer_verify_contract_offline_logistics_ext", "售后退货处理流程2(合同线下物流)", "1：采购商提交退货申请单-->2：供应商确认退货申请单-->3：采购商新增退货发货单-->4：采购商退货发货-->5：供应商新增退货入库单-->6：供应商退货收货-->7：采购商确认售后完成"),

    /**
     * 售后退货处理流程3(合同无收发货单) - 8
     */
    after_sale_return_goods_contract_manual_delivery_ext(8, "after_sale_return_goods_contract_manual_delivery_ext", "售后退货处理流程3(合同无收发货单)", "1：采购商提交退货申请单-->2：供应商确认退货申请单-->3：采购商退货发货-->4：供应商退货收货-->5：采购商确认售后完成"),

    /**
     * 售后维修流程 - 9
     */
    after_sale_repair_inner_verify(9, "after_sale_repair_inner_verify", "售后维修流程", "1-提交审核维修申请单-->2-审核维修申请单(一级)-->3-审核维修申请单(二级)-->4-确认维修申请单-->5-完成");

    BasePurchaseProcessEnum(Integer code, String processKey, String name, String remark) {
        this.code = code;
        this.processKey = processKey;
    }

    private Integer code;
    private String processKey;

    public Integer getCode() {
        return code;
    }

    public String getProcessKey() {
        return processKey;
    }

    public String getName() {
        return LanguageHolder.getName(this.getClass(), this.code);
    }

    public String getRemark() {
        return LanguageHolder.getName(this.getClass().getSimpleName().concat(".r.").concat(String.valueOf(this.code)));
    }

    /**
     * 根据流程枚举值查询流程名称
     * @param code 流程枚举值
     * @return 流程名称
     */
    public static String getNameByCode(Integer code) {
        return Arrays.stream(BasePurchaseProcessEnum.values()).filter(p -> p.getCode().equals(code)).map(BasePurchaseProcessEnum::getName).findFirst().orElse("");
    }

    /**
     * 根据流程枚举值查询流程步骤描述
     * @param code 流程枚举值
     * @return 流程步骤描述
     */
    public static String getRemarkByCode(Integer code) {
        return Arrays.stream(BasePurchaseProcessEnum.values()).filter(p -> p.getCode().equals(code)).map(BasePurchaseProcessEnum::getRemark).findFirst().orElse("");
    }
}
